<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // let money=5000;
        // money+=10000;
        // money-=40000;
        // console.log(money)

        // function count(number,type='add'){
        //     let money = 5000;
        //     money= (type=='add')?number+money:money-number;
        //     return money;
        // }
        // console.log(count(10000))
        // console.log(count(40000,'jian'))

        function fn() {
            let money = 5000;
            function count(number, type = 'add') {

                money = (type == 'add') ? number + money : money - number;
                return money;
            }
            return count;
        }
        var urse = fn();
        console.log(urse(10000))
        console.log(urse(40000, 'jian'))



        // 闭包：就是能够读取外层函数内部变量的函数。   访问另一个函数的局部变量
        // 闭包的格式：
        // 函数嵌套函数；
        // 外层声明变量，里层使用变量；
        // 外层函数中返回里层函数 。
        // 优点： 可以重复使用变量，并且不会造成变量污染 。
        // 缺点： 闭包会产生不销毁的上下文，会导致栈/堆内存消耗过大，有时候也会导致内存泄漏等，影响页面的运行性能，所以在真实项目中，要合理应用闭包！
        // 使用场景：防抖，节流，柯里化，缓存，getter和setter，迭代器.
    </script>

</body>

</html>